UNUserNotificationCenter হলো iOS এর UserNotifications Framework এর একটি অংশ, যা Local এবং Remote Notifications ম্যানেজ করতে সাহায্য করে। এটি iOS 10 এবং এর পরবর্তী ভার্সনগুলোতে ব্যবহার করা হয়। UNUserNotificationCenter ব্যবহার করে আমরা অ্যাপে Notifications এর কনফিগারেশন, সিডিউলিং, ডেলিভারি এবং হ্যান্ডলিং করতে পারি। নিচে UNUserNotificationCenter দিয়ে Notification Management এর বিস্তারিত আলোচনা করা হলো।
UNUserNotificationCenter দিয়ে Notification Management
UNUserNotificationCenter এর মাধ্যমে আমরা ব্যবহারকারীর কাছে Local এবং Remote Notifications পাঠাতে এবং এগুলোর ওপর সম্পূর্ণ নিয়ন্ত্রণ রাখতে পারি। আমরা Notifications এর জন্য অনুমতি চাওয়া থেকে শুরু করে, সেগুলোর কন্টেন্ট তৈরি এবং পাঠানো, কাস্টম অ্যাকশন যুক্ত করা, এবং বিভিন্ন সিচুয়েশনে Notifications হ্যান্ডল করা পর্যন্ত সবকিছু করতে পারি।
Step-by-Step Implementation of UNUserNotificationCenter
Step 1: Import UserNotifications Framework
প্রথমে আপনার ViewController বা AppDelegate ফাইলে UserNotifications Framework ইমপোর্ট করুন:
import UserNotifications
Step 2: Notification Authorization Request করা
Notifications পাঠানোর আগে ব্যবহারকারীর কাছ থেকে অনুমতি চেয়ে নিতে হয়। সাধারণত, এটি অ্যাপের লঞ্চের সময় বা নির্দিষ্ট কোনো ইভেন্টের সময় চাওয়া হয়।
func requestNotificationPermission() {
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
if granted {
print("Permission granted")
} else {
print("Permission denied")
}
}
}
ব্যাখ্যা:
- requestAuthorization: এটি ব্যবহার করে আমরা ব্যবহারকারীর কাছ থেকে অনুমতি চেয়ে থাকি।
- options: এখানে আমরা নির্ধারণ করি যে নোটিফিকেশনটি আলার্ট, সাউন্ড, এবং ব্যাজসহ প্রদর্শিত হবে কি না।
- Completion Handler: এই ব্লকটি ব্যবহারকারীর অনুমতি গ্রান্ট বা ডিনাই করার পর কাজ করে।
Step 3: UNUserNotificationCenterDelegate সেটআপ করা
Notifications হ্যান্ডল করার জন্য আমাদের UNUserNotificationCenterDelegate মেনে চলতে হবে। AppDelegate বা যেকোনো ViewController এ ডেলিগেট সেট করতে পারেন।
UNUserNotificationCenter.current().delegate = self
AppDelegate বা ViewController এ UNUserNotificationCenterDelegate প্রোটোকল যুক্ত করুন এবং নিচের ডেলিগেট মেথডগুলো ইমপ্লিমেন্ট করুন:
extension AppDelegate: UNUserNotificationCenterDelegate {
// যখন নোটিফিকেশন ডেলিভার করা হয়
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
// নোটিফিকেশন ফোরগ্রাউন্ডে থাকলেও প্রদর্শিত হবে
completionHandler([.banner, .sound, .badge])
}
// যখন নোটিফিকেশন ইন্টারঅ্যাকশন হয়
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
print("Notification interacted with")
completionHandler()
}
}
ব্যাখ্যা:
- willPresent: এই মেথডটি তখন কল হয়, যখন অ্যাপটি ফোরগ্রাউন্ডে থাকে এবং নোটিফিকেশন ডেলিভার করা হয়। এখানে আমরা নির্ধারণ করতে পারি, নোটিফিকেশনটি ব্যানার, সাউন্ড বা ব্যাজ সহ দেখানো হবে কি না।
- didReceive: এই মেথডটি তখন কল হয়, যখন ব্যবহারকারী নোটিফিকেশনটির সাথে ইন্টারঅ্যাকশন করে।
Step 4: Local Notification সেটআপ এবং শিডিউল করা
Local Notification সেটআপ করার জন্য UNUserNotificationCenter এর মাধ্যমে একটি UNMutableNotificationContent তৈরি করা হয়, যেখানে কন্টেন্ট, শিডিউল, এবং কাস্টমাইজেশন করা যায়।
func scheduleLocalNotification() {
// Notification কন্টেন্ট তৈরি করা
let content = UNMutableNotificationContent()
content.title = "Reminder"
content.body = "This is your scheduled reminder notification."
content.sound = UNNotificationSound.default
// Time Interval Trigger তৈরি করা (৫ সেকেন্ড পরে ট্রিগার হবে)
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
// Notification Request তৈরি করা
let request = UNNotificationRequest(identifier: "localNotification", content: content, trigger: trigger)
// Notification Center এ Request যুক্ত করা
UNUserNotificationCenter.current().add(request) { error in
if let error = error {
print("Error scheduling notification: \(error)")
} else {
print("Notification scheduled successfully!")
}
}
}
ব্যাখ্যা:
- UNMutableNotificationContent: নোটিফিকেশন কন্টেন্ট সেটআপ করতে ব্যবহার করা হয়। এখানে আমরা নোটিফিকেশনের টাইটেল, বডি, এবং সাউন্ড সেট করেছি।
- UNTimeIntervalNotificationTrigger: এটি একটি নির্দিষ্ট সময় পরে নোটিফিকেশন ট্রিগার করতে সাহায্য করে। এখানে ৫ সেকেন্ড পরে নোটিফিকেশন ট্রিগার হবে।
- UNNotificationRequest: এটি একটি নোটিফিকেশন রিকোয়েস্ট তৈরি করে এবং UNUserNotificationCenter এ যুক্ত করে।
Step 5: Category এবং Custom Actions যোগ করা
কিছু ক্ষেত্রে আমরা নোটিফিকেশনে কাস্টম অ্যাকশন যুক্ত করতে চাই, যেমন: "Snooze", "Mark as Done" ইত্যাদি। এজন্য নোটিফিকেশন কন্টেন্টে Category যোগ করতে হয়।
func setupNotificationCategory() {
// অ্যাকশন তৈরি করা
let snoozeAction = UNNotificationAction(identifier: "SNOOZE_ACTION", title: "Snooze", options: [])
let doneAction = UNNotificationAction(identifier: "DONE_ACTION", title: "Mark as Done", options: [.foreground])
// ক্যাটাগরি তৈরি করা
let category = UNNotificationCategory(identifier: "REMINDER_CATEGORY", actions: [snoozeAction, doneAction], intentIdentifiers: [], options: [])
// ক্যাটাগরি রেজিস্টার করা
UNUserNotificationCenter.current().setNotificationCategories([category])
}
// Notification সেটআপ করার সময় ক্যাটাগরি সেট করা
func scheduleLocalNotificationWithCategory() {
let content = UNMutableNotificationContent()
content.title = "Reminder"
content.body = "This is your scheduled reminder notification with actions."
content.sound = UNNotificationSound.default
content.categoryIdentifier = "REMINDER_CATEGORY" // ক্যাটাগরি আইডি সেট করা
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
let request = UNNotificationRequest(identifier: "localNotification", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request) { error in
if let error = error {
print("Error scheduling notification: \(error)")
}
}
}
ব্যাখ্যা:
- UNNotificationAction: অ্যাকশন তৈরি করা হয়েছে, যেমন: "Snooze" এবং "Mark as Done"।
- UNNotificationCategory: ক্যাটাগরি তৈরি করে, সেটি অ্যাকশনসহ রেজিস্টার করা হয়েছে।
- categoryIdentifier: নোটিফিকেশন কন্টেন্টে ক্যাটাগরি আইডেন্টিফায়ার সেট করা হয়েছে।
Step 6: Remote Notifications হ্যান্ডল করা
Remote Notifications (Push Notifications) সেটআপ করার জন্য AppDelegate এ UNUserNotificationCenterDelegate মেথড যুক্ত করতে হবে।
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let tokenParts = deviceToken.map { data in String(format: "%02.2hhx", data) }
let token = tokenParts.joined()
print("Device Token: \(token)")
}
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
print("Failed to register: \(error)")
}
ব্যাখ্যা:
- didRegisterForRemoteNotificationsWithDeviceToken: এই মেথডটি ডিভাইস টোকেন সংগ্রহ করে, যা সার্ভারে পাঠাতে হয়।
- didFailToRegisterForRemoteNotificationsWithError: রেজিস্ট্রেশন ব্যর্থ হলে এটি কল হয়।
Notifications এর সেরা চর্চা
- ব্যবহারকারীর অনুমতি সঠিকভাবে নিন: Notifications পাঠানোর আগে ব্যবহারকারীর কাছ থেকে যথাযথ অনুমতি চেয়ে নিন।
- Notification Categories এবং Actions ব্যবহার করুন: ব্যবহারকারীদের ইন্টারঅ্যাকশন বাড়াতে কাস্টম অ্যাকশন যুক্ত করুন।
- Error Handling নিশ্চিত করুন: Notification scheduling এর সময় সবসময় এরর চেক এবং হ্যান্ডল করুন।
- Local এবং Remote Notifications এর পার্থক্য জানুন: Local Notifications সরাসরি অ্যাপ থেকে শিডিউল করা হয়, যেখানে Remote Notifications সার্ভার থেকে পাঠানো হয়।
উপসংহার
UNUserNotificationCenter ব্যবহার করে iOS অ্যাপ্লিকেশনে Notifications ম্যানেজ করা খুবই সহজ। এটি Local এবং Remote Notifications এর জন্য শক্তিশালী সাপোর্ট প্রদান করে। Notifications এর মাধ্যমে ব্যবহারকারীদের কাছে গুরুত্বপূর্ণ তথ্য পাঠানো যায় এবং কাস্টম অ্যাকশন যুক্ত করে ইন্টারঅ্যাকশন বাড়ানো যায়, যা অ্যাপ্লিকেশনকে আরও কার্যকর এবং ব্যবহারকারীর কাছে আরও উপযোগী করে তোলে।
Read more